package cl.mt.mvc.action;

import java.util.HashMap;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionRedirect;
import org.apache.struts.chain.contexts.ActionContext;

import twitter4j.UserList;

import cl.mt.dto.DTOUsuario;
import cl.mt.mvc.helper.UsuarioHelper;


public class LoginAction extends Action {

	private Logger log = LogManager.getLogger(LoginAction.class.getName());
	
	  public ActionForward execute (ActionMapping mapping, ActionForm form,
			  	HttpServletRequest request, HttpServletResponse response) {
		  
		  String accion = request.getParameter("accion");
		  String forward = "SUCCESS";
		  log.debug("LoginAction..........");
		  log.debug("campo accion:["+accion+"]");
		  
		  HashMap<String, String> mapFw = new HashMap<String, String>();
			  mapFw.put("tieneDoblePerfil", "tieneDoblePerfil");
			  mapFw.put("oferente", "homeOferente");
			  mapFw.put("tienda_admin", "homeTiendaAdmin");
			  mapFw.put("transportista", "homeTransportista");
			  
		  
		  if("checkLogin".equals(accion)){
			  // validar login
			  UsuarioHelper help = new UsuarioHelper();
			  String user = request.getParameter("user");
			  String pwd = request.getParameter("pass");
			  DTOUsuario userLogin = help.validarLogin(user, pwd);
			  
			  if(!userLogin.isLoginOk()){
				  
				  forward="ERROR";
				  request.getSession().setAttribute("LoginOK", "nok");

			  }else {
				    if (userLogin.getIdPerfil().intValue() == 7 ) {
				    	userLogin.setTipoUsuario("S");
				    	userLogin.setMenuDespliegue("tienda_admin");
	                }
	                if (userLogin.getIdPerfil().intValue() == 1 || userLogin.getIdPerfil().intValue() == 6 ) {
	                    userLogin.setTipoUsuario("GT");
				    	userLogin.setMenuDespliegue("tieneDoblePerfil");
	                    request.setAttribute("tieneDoblePerfil","ok");
	                    
	                }
	                if (userLogin.getIdPerfil().intValue() == 2 || userLogin.getIdPerfil().intValue() == 4 ) {
	                    userLogin.setTipoUsuario("G");
	                    userLogin.setMenuDespliegue("oferente");
	                }
	                if (userLogin.getIdPerfil().intValue() == 3 || userLogin.getIdPerfil().intValue() == 5 ) {
	                    userLogin.setTipoUsuario("T");
	                    userLogin.setMenuDespliegue("transportista");
	                }
	                
				  request.getSession().setAttribute("userLogin", userLogin);
				  request.getSession().setAttribute("LoginOK", "ok");
				  request.getSession().setAttribute("userAdminEmpresa", userLogin.getEmpUserAdmin());
			  }
			  
			  
			  
			  ActionRedirect redirect =new ActionRedirect(mapping.findForward(mapFw.get(userLogin.getMenuDespliegue())));
			  return redirect;
			 
				  
			  
		  }else if("cambiaPerfil".equals(accion)){
			 // cambia el perfil de la session cuando tiene doble perfil
			  
			  DTOUsuario userLogin = (DTOUsuario) request.getSession().getAttribute("userLogin");
			  String newTipoUsuario = request.getParameter("newTipoUser"); 
			  
			  if (newTipoUsuario.equals("T")) {
				  userLogin.setMenuDespliegue("transportista");
				  userLogin.setTipoUsuario("T");
		      }else {
		    	  
				  userLogin.setMenuDespliegue("oferente");
				  userLogin.setTipoUsuario("G");
		      }
			  
		        
			  request.getSession().setAttribute("userLogin", userLogin);
			  request.getSession().setAttribute("LoginOK", "true");
			  
		  } else if("logOut".equals(accion)){
			  //cierro session
			  log.debug("cerrando session..."+request.getSession().getAttribute("LoginOK"));
			  request.getSession().invalidate();
			  log.debug("cerrar session..."+request.getSession().getAttribute("LoginOK"));
			  ActionRedirect redirect =new ActionRedirect(mapping.findForward("inicio"));
			  return redirect;
			  
		  }else if("getPwd".equals(accion)){
			  //cierro session
			  UsuarioHelper help = new UsuarioHelper();
			  String mail= request.getParameter("email");
			  log.debug("recuperar clave...mail["+mail+"]");
			  
			  DTOUsuario user = new DTOUsuario();
			  user.setMail(mail);
			  if(help.sendMailRecuperacionClave(user))
			  		log.debug("recuperar clave...ok");
			  else
					log.debug("recuperar clave...NOP");
			 
			  ActionRedirect redirect =new ActionRedirect(mapping.findForward("inicio.do"));
			  return redirect;
		  }

		 
		  return mapping.findForward(forward);
		  
		  
	  }

}